#!/bin/bash
#========================================================================
# Author: YSLin
# Email: 
# File Name: xargs.sh
# Description: 
#   
# Edit History: 
#   2011-01-18    File created.
#========================================================================

#-n表示最多把多少個資料送給cat處理,這邊一次只cat一個檔案 
ls -l | xargs -n 1 cat

#xargs用來處理一些輸出結果要來當另一個輸入的arguments碰到的問題。 例如
find /usr/include/ -name "*.h" | xargs -n 2 diff
#-n2是指定有兩兩當成輸出變成diff的argumnets
find /usr/include/ -name "*.h" | xargs grep '#ifdef'
#正常內定是輸出的一拖拉窟的結果，有用xargs時是一個一個餵給後面的命令
find /usr/include/ -name "*.h" | xargs -i cp {} ~/include/
#-i 與 { }可以把find的輸出的每一個當成cp的第一個argument， /.就可以當成第 二個argument。 其實find裡面有-exec這個選項後面也可以用{ }表示一個一個餵給後面程式，而不是 一拖拉庫的餵給後面程式。
find /usr/include/ -name "*.h" -exec cp {} ~/include/

#使用 -i 和 {}  就可以把前面所得到的輸出列表，不是一整串，而是一個一個地傳給後面的指令
#下述的指令的效果就像是這樣…
#cp ./VERSION.bak ~/bakdir
#cp ./inc/main.h.bak ~/bakdir
#cp  ./src/fork.c.bak ~/bakdir
#cp  ./src/common_lib/dl_string.c.bak ~/bakdir
#cp  ./src/common_lib/dl_math.c.bak ~/bakdir
find -iname "*.bak" | xargs -i cp {} ~/bakdir

#-0考慮有空白名稱的問題
ls -1 | xargs -0 echo

